//用函数找出 100 到 200 的素数

//以下是简单思维
#include <stdio.h>
#include <math.h>
int main()
{
	int i=0,count=0;
	for(i=100;i<=200;i++)
	{
		int j=0;
		int flag=1;//用于辅助标记（看下文）
		for(j=2;j<i-1;j++)//嵌套for循环，2到 i-1，why？素数的公因数只有自己和 1，因此从2开始（i是自身）
		/*for(j=2;j<sqrt(i);j++)*///更为简洁，解释请看文末
		{
			if(i%j==0)//如果是不是素数，那么就会被 2 到 i-1中的数整除
			{	
				flag=0;//此时把 0赋给 flag
				break;//break只能用于控制循环，不可以控制 if语句，
				//所以虽然 break在if里面，但其实控制的是内循环 for(j=2;j<i-1;j++)
				//当发现不是素数，即可以被某个数整除的时候，就 break，终止循环，没必要做不必要的计算
			}
/*			else
				printf("%d ",i);*///为什么不能写 else，而非要用 flag来进行判断呢
//此时的结果是100个 i（且每个 i从100到200的素数都各打印了100个）
//因为在(两层)循环之内(第二层循环对打印的次数无影响),所以打印了100个
//因此最好的办法就是，把打印的操作移到循环之外			
		}
		if(flag==1)//但误写成 flag=1的时候相当于赋值，yes！前面的（flag==0的操作废了），还会打印 100到 200全部
		{	printf("%d ",i);
			count++;//计数，看看一共有几个
		}
	}
		printf("\n");
		printf("count=%d",count);	
	
//开平方求素数，for(j=2;j<sqrt(i);j++)
//我们可以看到素数公因数的规律，以平方数为分界线，其实每组都是重复的
//eg. 16 sqrt(16)=4。1 16;2 8;4 4;8 2;16 1;
//看重复的吧，因此重复的部分去掉没必要计算，那么剩下 3组，
//我们细想，能被 2整除，肯定能被 8整除对吧，因为他们是一组的，因此我们只要计算一组中的其中一个就可以了
//即比本身平方数小的数
			
	return 0;
}